home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 3: The Continuation / 17-Bit_The_Continuation_Disc.iso / amigan / amigan 21 / recursion / butterfield / ktst_split < prev   
Encoding:
Text File  |  1994-01-27  |  2.3 KB  |  105 lines

  1. ' simple "pictorial" Knight's tour    Jim Butterfield 1988Aug4
  2. ' Press CTRL C to pause and enter a move at which to re-try at the q prompt.
  3. ' EXIT program by entering 0 (zero) at the q prompt.
  4.  
  5. DIM Board(8,8),MoveX(65),MoveY(65),MovePos(65)
  6. DIM PositX(8),PositY(8),MoveLim(65)
  7. DATA 1,2
  8. DATA 2,1
  9. DATA 2,-1
  10. DATA 1,-2
  11. DATA -1,-2
  12. DATA -2,-1
  13. DATA -2,1
  14. DATA -1,2
  15. FOR j=1 TO 8
  16.  READ PositX(j),PositY(j)
  17. NEXT j
  18. FOR j=1 TO 8
  19.  FOR k=1 TO 8
  20.   Board(j,k)=0
  21.  NEXT k
  22. NEXT j
  23. BigFinish=33
  24.    'Board(3,2)=99   '**********
  25. Move=1
  26. MoveX(Move)=1:MoveY(Move)=1
  27. Board(MoveX(Move),MoveY(Move))=1
  28. Board(9-MoveX(Move),9-MoveY(Move))=1+32
  29. ON BREAK GOSUB Smurf
  30. BREAK ON
  31. q=99
  32. GOSUB PlotMove
  33. GOSUB TryNew ' Try move from last position
  34. BREAK OFF
  35. ON BREAK GOSUB 0
  36. END
  37. PlotMove:
  38.  LOCATE MoveX(Move),MoveY(Move)*3
  39.  PRINT Move;
  40.  LOCATE 9-MoveX(Move),(9-MoveY(Move))*3
  41.  PRINT Move+32;
  42. RETURN
  43. WipeMove:
  44.  XX=MoveX(Move):YY=MoveY(Move)
  45.  Board(XX,YY)=0
  46.  LOCATE XX,YY*3
  47.  PRINT "   ";
  48.  Board(9-XX,9-YY)=0
  49.  LOCATE 9-XX,(9-YY)*3
  50.  PRINT "   ";
  51. RETURN
  52. TryNew:
  53.  Move=Move+1
  54.  MoveLim=8
  55.  MovePos(Move)=1
  56.  MoveLim(Move)=8
  57.  x1=MoveX(Move-1):y1=MoveY(Move-1)
  58.  x2=0
  59.  IF ((x1=2 AND y1=6) OR (x1=3 AND y1=7)) AND Board(1,8)=0 THEN x2=1:y2=8
  60.  IF ((x1=6 AND y1=2) OR (x1=7 AND y1=3)) AND Board(8,1)=0 THEN x2=8:y2=1
  61.  IF ((x1=6 AND y1=7) OR (x1=7 AND y1=6)) AND Board(8,8)=0 THEN x2=8:y2=8
  62.  IF x2>0 THEN
  63.   FOR MoveP=1 TO 8
  64.    IF x1+PositX(MoveP)=x2 AND y1+PositY(MoveP)=y2 THEN MovePos(Move)=MoveP:MoveLim(Move)=MoveP
  65.   NEXT MoveP
  66.   'STOP
  67.  END IF
  68.  WHILE MovePos(Move)<MoveLim(Move)+1 AND Move<BigFinish
  69.   MoveX(Move)=MoveX(Move-1)+PositX(MovePos(Move))
  70.   MoveY(Move)=MoveY(Move-1)+PositY(MovePos(Move))
  71.   OKx=MoveX(Move)<9 AND MoveX(Move)>0
  72.   OKy=MoveY(Move)<9 AND MoveY(Move)>0
  73.   IF Move=q THEN q=99
  74.   OK = OKx AND OKy AND Move<q
  75.   IF OK THEN OK=OK AND Board(MoveX(Move),MoveY(Move))=0
  76.   IF OK THEN
  77.    LOCATE 10,10
  78.    'PRINT Move;MoveX(Move),MoveY(Move);Board(MoveX(Move),MoveY(Move))
  79.    'STOP
  80.    Board(MoveX(Move),MoveY(Move))=Move
  81.    Board(9-MoveX(Move),9-MoveY(Move))=Move+32
  82.    GOSUB PlotMove
  83.    GOSUB TryNew
  84.   END IF
  85.    MovePos(Move)=MovePos(Move)+1
  86.  WEND
  87.  IF Move>=BigFinish AND (Board(3,2) MOD 32 = 0) THEN
  88.   LOCATE 10,1
  89.   PRINT "solution"
  90.   STOP
  91.   LOCATE 10,1
  92.   PRINT "        "
  93.  END IF
  94.   Move=Move-1
  95.   GOSUB WipeMove
  96. RETURN
  97.  
  98. Smurf:
  99.  LOCATE 11,1
  100.  INPUT "q";q
  101.  IF q=0 THEN STOP
  102.  LOCATE 11,1
  103.  PRINT "                 "
  104. RETURN
  105.